import asyncio
import websockets
import argparse
import os
import time
import os
from pathlib import Path
from typing import List, Optional

def build_image_queue(
    folder_path: str, 
    extensions: Optional[List[str]] = None,
    sort: bool = True
) -> List[str]:
    """
    构建文件夹中的图片路径队列

    Args:
        folder_path: 目标文件夹路径
        extensions: 允许的图片后缀列表（默认包含常见图片格式）
        sort: 是否按文件名排序（默认True）

    Returns:
        图片文件的完整路径列表

    Raises:
        ValueError: 如果文件夹路径无效
    """
    # 设置默认支持的图片格式
    if extensions is None:
        extensions = [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".webp"]
    
    # 转换为小写避免大小写问题
    extensions = {ext.lower() for ext in extensions}
    
    # 检查文件夹有效性
    folder = Path(folder_path)
    if not folder.is_dir():
        raise ValueError(f"无效的文件夹路径: {folder_path}")
    
    # 遍历文件并过滤
    image_paths = []
    for file in folder.iterdir():
        if file.is_file() and (file.suffix.lower() in extensions):
            image_paths.append(str(file.absolute()))
    
    # 按文件名排序
    if sort:
        image_paths.sort()
    
    return image_paths

async def upload_image(server_ip: str, port: int, image_path: str) -> None:
    """
    异步函数：通过 WebSocket 发送图片到指定服务器
    
    Args:
        server_ip: 服务器 IP 地址（例如 "192.168.1.100"）
        port: 服务器端口号（例如 8765）
        image_path: 要发送的本地图片路径（例如 "test.jpg"）
    """
    # 检查图片是否存在
    if not os.path.exists(image_path):
        print(f"错误：图片文件 '{image_path}' 不存在！")
        return

    # 读取图片数据
    try:
        with open(image_path, "rb") as f:
            image_data = f.read()
    except Exception as e:
        print(f"读取文件失败: {e}")
        return

    # 连接服务器并发送
    uri = f"ws://{server_ip}:{port}"
    try:
        async with websockets.connect(uri) as websocket:
            await websocket.send(image_data)
            print(f"图片 {image_path} 已发送至服务器 {server_ip}:{port}")
    except ConnectionRefusedError:
        print("无法连接服务器，请检查 IP 和端口")
    except Exception as e:
        print(f"发送失败: {e}")

# ---------------------- 保留命令行调用方式 ----------------------
def parse_args():
    """解析命令行参数"""
    parser = argparse.ArgumentParser(description="WebSocket 图像上传客户端")
    parser.add_argument("--server_ip", type=str, required=True, help="服务器IP")
    parser.add_argument("--port", type=int, default=8765, help="服务器端口")
    parser.add_argument("--image", type=str, required=True, help="要上传的图片路径")
    return parser.parse_args()

#python3 webcelient.py

if __name__ == "__main__":
    args = parse_args()
    images = build_image_queue("/home/chenwei/cw/control_communication/chunk_0000/chunk_0000_mp4/problem_cross")
    server_ip = "192.168.110.35"
    port = 8765
    # image = "/home/chenwei/cw/control_communication/chunk_0000/chunk_0000_mp4/problem_cross/chunk_0000_mp4_14350.jpg" 
    for image in images:
        asyncio.run(upload_image(server_ip, port, image))
        time.sleep(1)
     